package cn.iocoder.yudao.module.scenic.service.checkin;

import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.scenic.controller.admin.checkin.vo.CheckInPageByLocationReqVO;
import cn.iocoder.yudao.module.scenic.controller.admin.checkin.vo.CheckInPageByLocationResVO;
import cn.iocoder.yudao.module.scenic.controller.admin.checkin.vo.CheckInPageReqVO;
import cn.iocoder.yudao.module.scenic.controller.admin.checkin.vo.CheckInSaveReqVO;
import cn.iocoder.yudao.module.scenic.controller.app.checkin.vo.AppCheckInSaveReqVO;
import cn.iocoder.yudao.module.scenic.controller.app.checkin.vo.CheckInAppPageReqVO;
import cn.iocoder.yudao.module.scenic.controller.app.checkin.vo.CheckInPageResVO;
import cn.iocoder.yudao.module.scenic.dal.dataobject.checkin.CheckInDO;

import javax.validation.Valid;

/**
 * 实践点打卡 Service 接口
 *
 * @author 芋道源码
 */
public interface CheckInService {

    /**
     * 创建实践点打卡
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCheckIn(@Valid CheckInSaveReqVO createReqVO);

    /**
     * 更新实践点打卡
     *
     * @param updateReqVO 更新信息
     */
    void updateCheckIn(@Valid CheckInSaveReqVO updateReqVO);

    /**
     * 删除实践点打卡
     *
     * @param id 编号
     */
    void deleteCheckIn(Long id);

    /**
     * 获得实践点打卡
     *
     * @param id 编号
     * @return 实践点打卡
     */
    CheckInDO getCheckIn(Long id);

    /**
     * 获得实践点打卡分页
     *
     * @param pageReqVO 分页查询
     * @return 实践点打卡分页
     */
    PageResult<CheckInDO> getCheckInPage(CheckInPageReqVO pageReqVO);

    CommonResult checkIn(AppCheckInSaveReqVO createReqVO);

    /**
     * 根据省市区获得实践点打卡分页
     * @param pageReqVO
     * @return
     */
    PageResult<CheckInPageByLocationResVO> checkInPageByLocation(CheckInPageByLocationReqVO pageReqVO);

    PageResult<CheckInPageResVO> page(CheckInAppPageReqVO reqVO);
}